//
//  ZMTextViewExtern.swift
//  ZMWeiboSwift
//
//  Created by pg on 2017/8/3.
//  Copyright © 2017年 pg. All rights reserved.
//

import UIKit



extension ZMTextView{
    
    
    //获取富文本对应的字符串
    var emotionText: String{
        
        var result = ""
        //获取当前文本框中的富文本,遍历富文本,获取图片表情的表情描述
        self.attributedText.enumerateAttributes(in: NSMakeRange(0, self.attributedText.length), options: []) { (info:[String : Any], range, _) in
            
            //info  : 是遍历到的富文本信息
            //range: 富文本对应的范围
            if let attachMent = info["NSAttachment"] as? ZMTextAttachment  {
                //有文本附件表示有图片表情富文本
                let chs = attachMent.emotionModel?.chs
                result += chs!
            }else{
                //普通文字富文本
                //根据范围截取富文本,获取图片富文本对应的字符串
                let text = self.attributedText.attributedSubstring(from: range).string
                result +=  text
            }
            
            
        }
        
        
        
        return result
    }
    
    //插入表情富文本  或emoji表情
    func insertEmotion(emotionModel: ZMEmotionModel){
        
        //如果表情是图片表情,将图片表情转变成富文本
        if emotionModel.type == "0" {
            //记录上一次textview里面的富文本
            let lastAttributeString = NSMutableAttributedString(attributedString: self.attributedText)
            
            guard let font = self.font else {
                return
            }
            
            let attrbutedStr = NSAttributedString.attributedStringWith(emotionModel: emotionModel, font: UIFont.systemFont(ofSize: 14))
            //获取选中范围
            var selectRange = self.selectedRange
            //根据选中范围替换表情富文本
            lastAttributeString.replaceCharacters(in: selectRange, with: attrbutedStr)
            //统一设置富文本字体大小
           lastAttributeString.addAttribute(NSFontAttributeName, value: self.font!, range: NSMakeRange(0, lastAttributeString.length))
            //设置富文本
            self.attributedText = lastAttributeString
            //设置光标位置在插入的表情后面
            selectRange.location += 1
            //设置选中范围的长度为0
            selectRange.length = 0
            self.selectedRange = selectRange
            
            //设置富文本的时候系统该不会自动调用文字改变的通知和文字改变的代理方法,因此需要手动发送通知和执行代理方法
            NotificationCenter.default.post(name: NSNotification.Name.UITextFieldTextDidChange, object: nil)
            self.delegate?.textViewDidChange?(self)
            
            
        }else{
             //插入的emoji表情
            let emoji  = (emotionModel.code! as NSString).emoji()
            self.insertText(emoji!)
    
        }
        
        
        
        //将表情保存在最近表情这组数据里面
        
        
    }
    
    
    
    
    
    
}



